package net.siufung.core.template;

import lombok.AllArgsConstructor;
import net.siufung.core.template.dto.TemplateCommand;
import net.siufung.core.utils.FileUtil;

import java.io.File;
import java.util.List;
import java.util.Map;

/**
 * @author 陈建峰
 * @since 2022/8/18 6:25 下午
 */
@AllArgsConstructor
public abstract class AbstractTemplate implements ITemplate {

    @Override
    public AbstractTemplate batchOutput(List<TemplateCommand> templateCommandList) {
        for (TemplateCommand templateCommand: templateCommandList) {
            if(!FileUtil.existDir(new File(templateCommand.getOutputFile()), true)){
                writeFile(templateCommand.getDataModel(),
                        templateFilePath(templateCommand.getTemplatePath()),
                        templateCommand.getOutputFile());
            }
        }
        return this;
    }

    /**
     * 将模板转化成为文件
     * @param dataModel    渲染对象 MAP 信息
     * @param templatePath 模板文件
     * @param outputFile   文件生成的目录
     */
    protected abstract void writeFile(Map<String, Object> dataModel, String templatePath, String outputFile);

    /**
     * 模板真实文件路径
     * @param filePath 文件路径
     * @return String
     */
    protected abstract String templateFilePath(String filePath);
    
}
